#ifndef PLAYER_OWNED_STATE_H
#define PLAYER_OWNED_STATE_H

#include "State.h"

//forward declaration
class Player;

// Idle State Behavior: Default state
class PlayerIdleState : public State<Player>
{
private:

	PlayerIdleState(){}

	PlayerIdleState(const PlayerIdleState&);
	PlayerIdleState& operator=(const PlayerIdleState&);

public:

	static PlayerIdleState* Instance();

	virtual void Enter(Player *a_player);

	virtual void Execute(Player *a_player);

	virtual void Exit(Player *a_player);
};

class WalkState : public State<Player>
{
private:

	WalkState(){}

	WalkState(const WalkState&);
	WalkState& operator=(const WalkState&);

public:

	static WalkState* Instance();

	virtual void Enter(Player *a_player);

	virtual void Execute(Player *a_player);

	virtual void Exit(Player *a_player);
};

class MeleeState : public State<Player>
{
private:

	MeleeState(){}

	MeleeState(const MeleeState&);
	MeleeState& operator=(const MeleeState&);

public:

	static MeleeState* Instance();

	virtual void Enter(Player *a_player);

	virtual void Execute(Player *a_player);

	virtual void Exit(Player *a_player);
};

class PowerState : public State<Player>
{
private:

	PowerState(){}

	PowerState(const PowerState&);
	PowerState& operator=(const PowerState&);

public:

	static PowerState* Instance();

	virtual void Enter(Player *a_player);

	virtual void Execute(Player *a_player);

	virtual void Exit(Player *a_player);
};

class JumpState : public State<Player>
{
private:

	JumpState(){}

	JumpState(const JumpState&);
	JumpState& operator=(const JumpState&);

public:

	static JumpState* Instance();

	virtual void Enter(Player *a_player);

	virtual void Execute(Player *a_player);

	virtual void Exit(Player *a_player);
};

#endif






